Raport z przedmiotu Zaawansowana Eksploracja Danych.
library(DT)
library(dplyr)
library(ggplot2)
library(plotly)
library(reshape2)
library(plotly)
# Pretty Table
#knitr::opts_chunk$set(echo = TRUE)
prettyTable <- function(table_df, round_columns=numeric(), round_digits=2) {
DT::datatable(table_df, style="bootstrap", filter = "top", rownames = FALSE, extensions = "Buttons", options = list(dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf', 'print'))) %>%
formatRound(round_columns, round_digits)
}
W celu załadowania należy upewnić się, że plik z danymi all_summary.csv znajduje się w folderze data, lub zmienić ścieżkę docelową poniżej.
my_data <-read.csv(file='./data/all_summary.csv', sep = ";",
header = TRUE, stringsAsFactors = FALSE,nrow = 1000)
str(my_data)
summary(my_data)
head(my_data)
“UNK”, “UNX”, “UNL”, “DUM”, “N”, “BLOB”, “ALA”, “ARG”, “ASN”, “ASP”, “CYS”, “GLN”, “GLU”, “GLY”, “HIS”, “ILE”, “LEU”, “LYS”, “MET”, “MSE”, “PHE”, “PRO”,“SEC”, “SER”, “THR”, “TRP”, “TYR”, “VAL”, “DA”, “DG”, “DT”, “DC”, “DU”, “A”, “G”, “T”, “C”, “U”, “HOH”, “H20”, “WAT”
my_data_skip <- my_data[ ! my_data$res_name %in% c('UNK', 'UNX', 'UNL', 'DUM', 'N', 'BLOB', 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLN','GLU', 'GLY', 'HIS', 'ILE', 'LEU', 'LYS', 'MET', 'MSE', 'PHE', 'PRO', 'SEC', 'SER','THR', 'TRP', 'TYR', 'VAL', 'DA', 'DG', 'DT', 'DC', 'DU', 'A', 'G', 'T', 'C', 'U', 'HOH', 'H20', 'WAT'), ]
Tworzę osobną zmienną do przetrzymywania istotnych kolumn; tj. column z pkt. poprzedniego, kolumny res_name oraz innych zawartych w zadaniach z ćwiczenia.
rest_col <- c('res_name','local_res_atom_non_h_count','local_res_atom_non_h_electron_sum',
'dict_atom_non_h_count','local_res_atom_non_h_electron_sum',
'dict_atom_non_h_electron_sum','local_volume','local_electrons','local_mean','local_std','local_min','local_max','local_skewness')
Przypisuję te kolumny do zmiennej my_data_skip_col. Dodatkowo sprawdzam, które w kolejności to kolumny
my_data_skip_col <- my_data_skip[ , grepl( "part_" , names( my_data_skip ) ) ]
grepl( "part_" , names( my_data_skip ) )
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [34] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [45] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [56] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [67] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [78] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [89] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [100] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [111] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [122] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [133] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [144] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [155] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [166] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [177] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [188] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [199] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [210] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [221] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [232] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [243] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [254] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [265] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [276] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [287] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [298] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [309] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [320] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [331] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [342] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [353] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [364] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [375] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [386] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [408] FALSE FALSE TRUE TRUE TRUE
res_name, part_ (c(79:396),c(410:412)) oraz rest_col
select_col <- my_data_skip %>% select('res_name',c(79:396),c(410:412),rest_col)
Liczba wierszy przed oczyszczeniem:
#liczba col, przed pozbyciem się niepełnych danych
nrow(select_col)
## [1] 1000
Utworzona zostaje nowa zmienna: select_colno_NA
#lprzetwarzanie wartośći NA
select_colno_NA <- select_col[complete.cases(select_col), ]
Liczba kolumn po oczyszczeniem:
#liczba col, przed pozbyciem się niepełnych danych
nrow(select_colno_NA)
## [1] 882
Funkcja summary, head, nrow, ncol, oraz str
#Sekcję podsumowującą rozmiar zbioru i podstawowe statystyki.
summary(select_colno_NA)
head(select_colno_NA, 10)
nrow(select_colno_NA)
ncol(select_colno_NA)
str(select_colno_NA)
Utworzona zostaje nowa zmienna: res_name_50
# Korzystam z biblioteki dplr
res_name_50 <- select_colno_NA %>%
group_by(res_name) %>%
summarise(SUM = n()) %>% arrange(desc(SUM)) %>% select(res_name)
res_name_50 <- head(res_name_50, 50)
Tworzę selekcję danych. Tylko te z 50-cioma najpopularniejszymi klasami. Do tego celu tworzę zmienną: strvariable
# Przypisanie do zmiennej strvariable wartości res_name_50, w celu późniejszego użycia
strvariable <- ''
for(i in res_name_50){strvariable <- paste(i)}
strvariable
Kod z danymi tylko 50 najpopularniejszych klas:
# Wykorzystanie zmiennej strvariable
only50class <- select_colno_NA[ select_colno_NA$res_name %in% c(strvariable), ]
only50class %>% group_by(res_name) %>%
summarise(SUM = n()) %>% arrange(desc(SUM)) %>% select(res_name, SUM)
## # A tibble: 50 x 2
## res_name SUM
## <chr> <int>
## 1 SO4 109
## 2 HEM 73
## 3 GOL 61
## 4 NAG 48
## 5 ZN 40
## 6 MG 28
## 7 MLY 28
## 8 CD 24
## 9 K 23
## 10 CA 21
## # ... with 40 more rows
# Liczba kolumn została zmniejszona poprzez wyelminowanie niepowatarzających się rzadkich ligandów
nrow(only50class)
## [1] 739
Sekcja ta powinna zawierać jakąś formę graficznej prezentacji korelacji.
head(only50class, 50)
summary(only50class)
str(only50class)
# Wybranie tylko column numerycznych
nums <- unlist(lapply(only50class, is.numeric))
# Utworzenie nowej zmiennej
only50class_num <- only50class[ , nums]
# Analiza danych
str(only50class_num)
#Korelacja między zmiennymi (Ze względu na ogromną liczbę kolumn, dodatkowo ograniczam wynik do col od 2 do 8)
cormat <- round(cor(only50class_num[,c(2:8)]),8)
head(cormat)
melted_cormat <- melt(cormat)
head(melted_cormat)
ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) +
geom_tile()
only50class %>% group_by(res_name) %>%
summarise(SUM = n()) %>% arrange(desc(SUM)) %>% select(res_name, SUM)
## # A tibble: 50 x 2
## res_name SUM
## <chr> <int>
## 1 SO4 109
## 2 HEM 73
## 3 GOL 61
## 4 NAG 48
## 5 ZN 40
## 6 MG 28
## 7 MLY 28
## 8 CD 24
## 9 K 23
## 10 CA 21
## # ... with 40 more rows
(local_res_atom_non_h_count) i elektronów (local_res_atom_non_h_electron_sum). W zadaniu zawarty został także pkt. 13 Interaktywny wykres lub animację.
only50class_grby <- only50class %>%
group_by(local_res_atom_non_h_electron_sum) %>%
summarise(SUM = n()) %>% select(local_res_atom_non_h_electron_sum, SUM)
p <- ggplot(only50class_grby, aes(SUM, local_res_atom_non_h_electron_sum)) +
geom_point()
ggplotly(p)
only50class_grby_at <- only50class %>%
group_by(local_res_atom_non_h_count) %>%
summarise(SUM = n()) %>% select(local_res_atom_non_h_count, SUM)
p <- ggplot(only50class_grby_at, aes(SUM, local_res_atom_non_h_count)) +
geom_point()
ggplotly(p)
Podsumowanie: Najwięcej danych bo około 193 ma wartość zmiennej local_res_atom_non_h_count równą 1.
(local_res_atom_non_h_count vs dict_atom_non_h_count) i tabelę pokazującą 10 klas z największą niezgodnością liczby elektronów (local_res_atom_non_h_electron_sum vs dict_atom_non_h_electron_sum;)
local_res_atom_non_h_count vs dict_atom_non_h_count local_res_atom_non_h_electron_sum vs dict_atom_non_h_electron_sum
#Atom vs Atom
atom_vs_atom <- only50class %>% mutate(Difference = abs(local_res_atom_non_h_count-dict_atom_non_h_count)) %>%
group_by(Difference) %>% arrange(desc(Difference)) %>% select (res_name,Difference,local_res_atom_non_h_count,dict_atom_non_h_count)
prettyTable(head(atom_vs_atom,10))
#Electron vs Electron
electron_vs_electron <- only50class %>%
mutate(Difference = abs(local_res_atom_non_h_electron_sum-dict_atom_non_h_electron_sum)) %>%
group_by(Difference) %>% arrange(desc(Difference)) %>% select (res_name,Difference,local_res_atom_non_h_electron_sum,dict_atom_non_h_electron_sum)
prettyTable(head(electron_vs_electron,10))